// package com.peng.lucene;
//
// import org.apache.commons.lang3.tuple.Pair;
// import org.apache.lucene.analysis.Analyzer;
// import org.apache.lucene.analysis.standard.StandardAnalyzer;
// import org.apache.lucene.document.Document;
// import org.apache.lucene.document.Field;
// import org.apache.lucene.document.TextField;
// import org.apache.lucene.index.DirectoryReader;
// import org.apache.lucene.index.IndexReader;
// import org.apache.lucene.index.IndexWriter;
// import org.apache.lucene.index.IndexWriterConfig;
// import org.apache.lucene.queryparser.classic.ParseException;
// import org.apache.lucene.queryparser.classic.QueryParser;
// import org.apache.lucene.search.IndexSearcher;
// import org.apache.lucene.search.Query;
// import org.apache.lucene.search.ScoreDoc;
// import org.apache.lucene.search.TopDocs;
// import org.apache.lucene.store.Directory;
// import org.apache.lucene.store.FSDirectory;
//
// import java.io.Closeable;
// import java.io.IOException;
// import java.nio.file.Paths;
// import java.util.ArrayList;
// import java.util.Collection;
// import java.util.List;
// import java.util.Map;
//
// /**
//  * Indexer
//  *
//  * @author: lupeng10
//  * @create: 2023-04-28 19:41
//  */
// public class Indexer implements Closeable {
//
//     private IndexWriter writer;
//
//     private String indexDir;
//
//     public Indexer(String indexDir) throws IOException {
//         FSDirectory dir = FSDirectory.open(Paths.get(indexDir));
//         StandardAnalyzer analyzer = new StandardAnalyzer();
//         IndexWriterConfig indexWriterConfig = new IndexWriterConfig(analyzer);
//         this.writer = new IndexWriter(dir, indexWriterConfig);
//         this.indexDir = indexDir;
//     }
//
//     @Override
//     public void close() throws IOException {
//         writer.close();
//     }
//
//     /**
//      * 构建索引
//      */
//     public void index(Collection<Map<String, String>> dataList) throws IOException {
//         for (Map<String, String> data : dataList) {
//             Document document = new Document();
//             for (Map.Entry<String, String> entry : data.entrySet()) {
//                 document.add(new TextField(entry.getKey(), entry.getValue(), Field.Store.YES));
//             }
//             writer.addDocument(document);
//         }
//         writer.commit();
//     }
//
//     /**
//      * 查询
//      */
//     public List<Document> search(Pair<String, String> q) throws IOException, ParseException {
//         // 得到读取索引文件的路径
//         Directory dir = FSDirectory.open(Paths.get(indexDir));
//         // 通过dir得到的路径下的所有的文件
//         IndexReader reader = DirectoryReader.open(dir);
//         // 建立索引查询器
//         IndexSearcher is = new IndexSearcher(reader);
//         // 实例化分析器
//         Analyzer analyzer = new StandardAnalyzer();
//         // 建立查询解析器
//         /**
//          * 第一个参数是要查询的字段； 第二个参数是分析器Analyzer
//          */
//         QueryParser parser = new QueryParser(q.getLeft(), analyzer);
//         // 根据传进来的p查找
//         Query query = parser.parse(q.getRight());
//
//         TopDocs hits = is.search(query, 10);
//
//         List<Document> result = new ArrayList<>();
//         for (ScoreDoc scoreDoc : hits.scoreDocs) {
//             Document doc = is.doc(scoreDoc.doc);
//             result.add(doc);
//         }
//         return result;
//     }
// }
